如果a[i] + b[j] > x ,则不断左移j,当j停止移动时,a[i] + b[j] 只有可能等于或小于x ,如果是小于,再右移i,增大a[i]即可。i右移,使用s数组记录选中的数,当选中区间中有重复数字出现时,j右移,当选中区间没有...
如果a[i] + b[j] > x ,则不断左移j,当j停止移动时,a[i] + b[j] 只有可能等于或小于x ,如果是小于,再右移i,增大a[i]即可。i右移,使用s数组记录选中的数,当选中区间中有重复数字出现时,j右移,当选中区间没有...
万字长文撰写史上最全的AcWing算法基础课题集,每道题会给出多种解法,不局限于一种思路,可以帮助读者从不同角度思考题目。算法代码简洁,适合背诵记忆,方便读者后期复盘巩固
Acwing 算法基础课超详细笔记
定义: 首先给定一个原数组a:a[1], a[2], a[3], a[n];然后我们构造一个数组b : b[1] ,b[2] , b[3], b[i];map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动...
本篇文章是在Acwing种学习动态规划的笔记题解,其中的不是很理解,就没有往上写。
背包问题: 1. 01背包问题(每件物品只使用一次) 2. 完全背包问题(每件物品可以重复...本来是打算按照acwing算法基础课的顺序学的,但是对背包问题比较感兴趣,就想先把背包问题给学完。 一、01背包问题 1.题目描述
Acwing 算法基础学习笔记
1111111111111
3.a每一次迭代,都乘以自身。以达到a aa aaaa aaaaaaaa……1.a的b次方,b通过二进制表示可以转化为几个2的倍数相乘。1.要区分a^2^0和1的区别,编程时脑子容易糊。2.通过b不断的右移和取末尾元素判断是否乘a。...
标签: 算法
2.相比于暴力做法,试除法只添加了i的遍历的取值上限。注意,之前习惯用i*i
1.试除法就是让i遍历的最大值到a/i。2.约数成对存在,只遍历前一部分即可。
从前往后捋,我们发现。在不断的向后运行过程中,我们一直在潜移默化的维持着一个栈,这个栈是单调递增的。有新元素添加时,如果比末尾元素大,则添加到末尾,如果比末尾元素小,则栈一直pop直到符合单调的性质为止...
标签: 笔记
这句话意思不假,但是容易让人绕不过弯来,想着,“既然i向右移动一个出现了冗余,则j直接移动到i的位置不就ok了么,这样就将重复区间越过去了不是么。如果在j从左往右遍历的过程中,j在冗余段的左边,则j至i这一段...
该笔记共八个节点(由浅入深),分为三大模块。。秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这...
如果r = mid了。则l = mid+1,上面mid = l+r>>1;3.如果l = mid了,则r= mid-1,上面mid = l+r+1>>1;此步的目的是防止死锁。做该类问题时,如果发生死锁,则大概率是这一步没有敲对。1.求左端点则check()的是左边区域...
排序算法 快排是不稳定的(可以加关键字,即二元组进行排序) 快速排序算法(分治思想) 步骤 确定分界点:可以用最小下标值、中间值以及随机选取 调整区间:双指针 递归处理左右两段 代码模板 几种模板详解转载...
2.注意是下标为l还是第l。
【代码】递归问题总结(Acwing算法笔记)
这种单链表本质上是用空间换时间。Idex不断增加,下标充当指针。e[]数组存放数据,en[]数组存放下一个结点地址。在第k个添加的结点后添加新结点。删除第k个添加的结点。
标签: 算法
一、容斥原理 题目思路: 求素数倍数,n除p下取整,交集除以p1,p2的积 代码: #include <iostream> #include <algorithm> using namespace std; const int N = 20; typedef long long LL;.....
最优的解法一定是有顺序的,不重不漏。由于修改一个,其上下左右都会改变,为了不对一行的格子重复修改,所以我们在遍历k行的时候,要修改k+1的对应的格子。这样所有的状态都由第一行却确定。还有一点就是所有的操作...
标签: 笔记
易错点在于要在运行之前将数组内的每一个数p[i]=i。即将根节点命名为自己。优化:路径压缩每次查询都将该结点的父亲结点换为根节点。
需要注意的就是,不要忘了将h[N]的结点全都初始化为-1,表示空结点。做哈希的时候,模的数一般取成质数。
标签: 笔记
在发生q[i]>q[j]时,表明所有的i以后的数大于j以前的数,这样就 有一个问题,每次累加是累加i以后的部分呢还是j以前的部分呢?上面的代码出错就出错在了每次累加j以前的部分。因为每次发生q[i]>q[j]时,我们下一步...
priority_queue<结构体名,vector<结构体名>,greater<结构体名>> q;priority_queue<结构体名,vector<结构体名>,less<结构体名>> q;